LessEqual ================= 逐元素计算第一个输入 (Input0) 的元素是否小于等于第二个输入 (Input1) 的对应元素。该算子支持广播机制。 .. math:: output_i = \begin{cases} \text{True}, & \text{if } Input0_0 <= Input1_i \text{ (Input0 is broadcasted)} \\ \text{True}, & \text{if } Input0_i <= Input1_0 \text{ (Input1 is broadcasted)} \\ \text{True}, & \text{if } Input0_i <= Input1_i \text{ (No broadcast)} \\ \text{False}, & \text{otherwise} \end{cases} 输入: - **Input0** - 第一个输入数据地址。 - **Input1** - 第二个输入数据地址。 - **params** - 其他参数打包成数组: - **input0_dims** - input0 的维度。 - **input1_dims** - input1的维度。 - **output_dims** - output的维度。 - **strides0** - Input0 的步长,大小为8*sizeof(int) - **strides1** - Input1 的步长,大小为8*sizeof(int) - **strides_output** - Output 的步长,大小为8*sizeof(int) - **num_dims** - 维度数量。 - **core_mask** - 核掩码(仅共享存储版本需要)。 输出: - **Output** - 计算结果地址。 支持平台: ``FT78NE`` ``MT7004`` .. note:: - FT78NE 支持int8, int16, int32, fp32, fp64 - MT7004 支持fp16, fp32, int16, int32 **共享存储版本:** .. c:function:: void i8_less_equal_s(int8_t* Input0, int8_t* Input1, bool* output, long long *params, int core_mask) .. c:function:: void i16_less_equal_s(int16_t* Input0, int16_t* Input1, bool* output, long long *params, int core_mask) .. c:function:: void i32_less_equal_s(int32_t* Input0, int32_t* Input1, bool* output, long long *params, int core_mask) .. c:function:: void hp_less_equal_s(half* Input0, half* Input1, bool* output, long long *params, int core_mask) .. c:function:: void fp_less_equal_s(float* Input0, float* Input1, bool* output, long long *params, int core_mask) .. c:function:: void dp_less_equal_s(double* Input0, double* Input1, bool* output, long long *params, int core_mask) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 46 //FT78NE示例 #include #include // 假设头文件名为 less.h int main(int argc, char* argv[]) { float *input0 = (float *)0x81000000; float *input1 = (float *)0x82000000; bool *output = (bool *)0x83000000; int *strides0 = (int*)0x84000000; int *strides1 = (int*)0x85000000; int *strides_output = (int*)0x86000000; int i = 0; srand(seed++); float f_min = -100.0; float f_max = 100.0; // same shape int input0_dims[] = {4, 8, 17}; // 2x2 int input1_dims[] = {4, 8, 17}; // 2x2 int output_dims[] = {4, 8, 17}; // 2x2 int num_dims = 3; unsigned long long params[9]; params[0] = (unsigned long long)input0_dims; params[1] = (unsigned long long)input1_dims; params[2] = (unsigned long long)output_dims; params[3] = (unsigned long long)strides0; params[4] = (unsigned long long)strides1; params[5] = (unsigned long long)strides_output; params[6] = (unsigned long long)num_dims; int total_input0 = get_total_elements(num_dims, input0_dims); int total_input1 = get_total_elements(num_dims, input1_dims); int total_output = get_total_elements(num_dims, output_dims); for(i = 0;i < total_input0;++i) { input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } for(i = 0;i < total_input1;++i) { input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } int core_mask = 0b1111; fp_less_equal_s(input0, input1, output, params, core_mask);//调用汇编 return 0; } **私有存储版本:** .. c:function:: void i8_less_equal_p(int8_t* Input0, int8_t* Input1, bool* output, long long *params) .. c:function:: void i16_less_equal_p(int16_t* Input0, int16_t* Input1, bool* output, long long *params) .. c:function:: void i32_less_equal_p(int32_t* Input0, int32_t* Input1, bool* output, long long *params) .. c:function:: void hp_less_equal_p(half* Input0, half* Input1, bool* output, long long *params) .. c:function:: void fp_less_equal_p(float* Input0, float* Input1, bool* output, long long *params) .. c:function:: void dp_less_equal_p(double* Input0, double* Input1, bool* output, long long *params) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 46 //FT04示例 #include #include // 假设头文件名为 less.h int main(int argc, char* argv[]) { float *input0 = (float *)0x10010000; float *input1 = (float *)0x10020000; bool *output = (bool *)0x10030000; int *strides0 = (int*)0x10050000; int *strides1 = (int*)0x10060000; int *strides_output = (int*)0x10070000; int i = 0; srand(seed++); float f_min = -100.0; float f_max = 100.0; // same shape int input0_dims[] = {4, 8, 17}; // 2x2 int input1_dims[] = {4, 8, 17}; // 2x2 int output_dims[] = {4, 8, 17}; // 2x2 int num_dims = 3; unsigned long long params[9]; params[0] = (unsigned long long)input0_dims; params[1] = (unsigned long long)input1_dims; params[2] = (unsigned long long)output_dims; params[3] = (unsigned long long)strides0; params[4] = (unsigned long long)strides1; params[5] = (unsigned long long)strides_output; params[6] = (unsigned long long)num_dims; int total_input0 = get_total_elements(num_dims, input0_dims); int total_input1 = get_total_elements(num_dims, input1_dims); int total_output = get_total_elements(num_dims, output_dims); for(i = 0;i < total_input0;++i) { input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } for(i = 0;i < total_input1;++i) { input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } fp_less_equal_p(input0, input1, output, params);//调用汇编 return 0; }